<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
     var length=10;
     function fn(){
         console.log(this.length);
         //10
         //2
     }
     var obj={
         length:5,
         method:function (fn){
           fn();
           arguments[0]();
         }

     }
     obj.method(fn,1);
     输出:10

// 为什么不是10和5?

// 首先，由于fn作为函数方法的参数传递，函数fn的作用域( this )是窗口。varlength=10;在窗口级别声明。它也可以作为window.length或length或this.length来访问(当这个===窗口时)。

// 方法绑定到Object obj, obj.method用参 数fn和1调用。虽然方法只接受-个参数，但调用它时已经传递了两个参数;第- -个是函数回调，其他只是一一个数字。

// 当在内部方法中调用fn()时，该函数在全局级别作为参数传递，this length将有权访问在Object obj中定义的var length= 10 (全局声明)而不是length= 5。

// 现在，我们知道我们可以使用arguments[数组访问JavaScript函数中的任意数量的参数。

// 因此arguments0只不过是调用fn()。在fn里面，这个函数的作用域成为参数数组，并且记录参数0的长度将返回2。

// 因此输出将如.上所述。
    </script>
</body>
</html>